//package com.digiwin.dap.middleware.trace;
//
//
//import org.springframework.boot.actuate.trace.http.TraceableRequest;
//import org.springframework.util.StringUtils;
//import org.springframework.web.util.UriUtils;
//
//import javax.servlet.http.HttpServletRequest;
//import java.net.URI;
//import java.net.URISyntaxException;
//import java.nio.charset.StandardCharsets;
//import java.util.*;
//
//final class TraceableHttpServletRequest implements TraceableRequest {
//    private final HttpServletRequest request;
//
//    TraceableHttpServletRequest(HttpServletRequest request) {
//        this.request = request;
//    }
//
//    @Override
//    public String getMethod() {
//        return this.request.getMethod();
//    }
//
//    @Override
//    public URI getUri() {
//        String queryString = this.request.getQueryString();
//        if (!StringUtils.hasText(queryString)) {
//            return URI.create(this.request.getRequestURL().toString());
//        } else {
//            try {
//                StringBuffer urlBuffer = this.appendQueryString(queryString);
//                return new URI(urlBuffer.toString());
//            } catch (URISyntaxException var5) {
//                String encoded = UriUtils.encodeQuery(queryString, StandardCharsets.UTF_8);
//                StringBuffer urlBuffer = this.appendQueryString(encoded);
//                return URI.create(urlBuffer.toString());
//            }
//        }
//    }
//
//    private StringBuffer appendQueryString(String queryString) {
//        return this.request.getRequestURL().append("?").append(queryString);
//    }
//
//    public Map<String, List<String>> getHeaders() {
//        return this.extractHeaders();
//    }
//
//    public String getRemoteAddress() {
//        return this.request.getRemoteAddr();
//    }
//
//    private Map<String, List<String>> extractHeaders() {
//        Map<String, List<String>> headers = new LinkedHashMap();
//        Enumeration names = this.request.getHeaderNames();
//
//        while(names.hasMoreElements()) {
//            String name = (String)names.nextElement();
//            headers.put(name, Collections.list(this.request.getHeaders(name)));
//        }
//
//        return headers;
//    }
//}
